function TrackerTest() {

	TrackerTest.prototype = new TestCase();
	TestCase.call( this, 'TrackerTest' );
	
	this.test_WhenConstructedSetsAllTheAssertionCountsToZero = function() {

		var tracker = new TestResultTracker();

		this.assertEqual( 0, tracker.getTotalNumberOfAssertionsPassed()				, 'TotalPassed' );
		this.assertEqual( 0, tracker.getTotalNumberOfAssertionsFailed()				, 'TotalFailed' );
		this.assertEqual( 0, tracker.getTotalNumberOfAssertions()					, 'Total' );
		this.assertEqual( 0, tracker.getThisTestCasesNumberOfAssertionsPassed()		, 'CasesPassed' );
		this.assertEqual( 0, tracker.getThisTestCasesNumberOfAssertionsFailed()		, 'CasesFailed' );
		this.assertEqual( 0, tracker.getThisTestCasesNumberOfAssertions()			, 'CasesTotal' );
		this.assertEqual( 0, tracker.getThisTestMethodsNumberOfAssertionsPassed()	, 'MethodPassed' );
		this.assertEqual( 0, tracker.getThisTestMethodsNumberOfAssertionsFailed()	, 'MethodFailed' );
		this.assertEqual( 0, tracker.getThisTestMethodsNumberOfAssertions()			, 'MethodTotal' );
	}

	this.test_WhenToldAnAssertionHasPassedIncreasesThePassAndTotalCountsByOneButDoesNotIncreaseTheFailCounts = function() {

		var tracker = new TestResultTracker();
		tracker.reportAssertionPass();

		this.assertEqual( 1, tracker.getTotalNumberOfAssertionsPassed()				, 'TotalPassed' );
		this.assertEqual( 0, tracker.getTotalNumberOfAssertionsFailed()				, 'TotalFailed' );
		this.assertEqual( 1, tracker.getTotalNumberOfAssertions()					, 'Total' );
		this.assertEqual( 1, tracker.getThisTestCasesNumberOfAssertionsPassed()		, 'CasesPassed' );
		this.assertEqual( 0, tracker.getThisTestCasesNumberOfAssertionsFailed()		, 'CasesFailed' );
		this.assertEqual( 1, tracker.getThisTestCasesNumberOfAssertions()			, 'CasesTotal' );
		this.assertEqual( 1, tracker.getThisTestMethodsNumberOfAssertionsPassed()	, 'MethodPassed' );
		this.assertEqual( 0, tracker.getThisTestMethodsNumberOfAssertionsFailed()	, 'MethodFailed' );
		this.assertEqual( 1, tracker.getThisTestMethodsNumberOfAssertions()			, 'MethodTotal' );
	}

	this.test_WhenRepeatedlyToldAnAssertionHasPassedIncreasesThePassAndTotalCountsByOneEachTimeButDoesNotIncreaseTheFailCounts = function() {

		var tracker = new TestResultTracker();
		tracker.reportAssertionPass();
		tracker.reportAssertionPass();
		tracker.reportAssertionPass();

		this.assertEqual( 3, tracker.getTotalNumberOfAssertionsPassed()				, 'TotalPassed' );
		this.assertEqual( 0, tracker.getTotalNumberOfAssertionsFailed()				, 'TotalFailed' );
		this.assertEqual( 3, tracker.getTotalNumberOfAssertions()					, 'Total' );
		this.assertEqual( 3, tracker.getThisTestCasesNumberOfAssertionsPassed()		, 'CasesPassed' );
		this.assertEqual( 0, tracker.getThisTestCasesNumberOfAssertionsFailed()		, 'CasesFailed' );
		this.assertEqual( 3, tracker.getThisTestCasesNumberOfAssertions()			, 'CasesTotal' );
		this.assertEqual( 3, tracker.getThisTestMethodsNumberOfAssertionsPassed()	, 'MethodPassed' );
		this.assertEqual( 0, tracker.getThisTestMethodsNumberOfAssertionsFailed()	, 'MethodFailed' );
		this.assertEqual( 3, tracker.getThisTestMethodsNumberOfAssertions()			, 'MethodTotal' );
	}

	this.test_WhenToldAnAssertionHasFailedIncreasesTheFailAndTotalCountsByOneButDoesNotIncreaseThePassCounts = function() {

		var tracker = new TestResultTracker();
		tracker.reportAssertionFail();

		this.assertEqual( 0, tracker.getTotalNumberOfAssertionsPassed()				, 'TotalPassed' );
		this.assertEqual( 1, tracker.getTotalNumberOfAssertionsFailed()				, 'TotalFailed' );
		this.assertEqual( 1, tracker.getTotalNumberOfAssertions()					, 'Total' );
		this.assertEqual( 0, tracker.getThisTestCasesNumberOfAssertionsPassed()		, 'CasesPassed' );
		this.assertEqual( 1, tracker.getThisTestCasesNumberOfAssertionsFailed()		, 'CasesFailed' );
		this.assertEqual( 1, tracker.getThisTestCasesNumberOfAssertions()			, 'CasesTotal' );
		this.assertEqual( 0, tracker.getThisTestMethodsNumberOfAssertionsPassed()	, 'MethodPassed' );
		this.assertEqual( 1, tracker.getThisTestMethodsNumberOfAssertionsFailed()	, 'MethodFailed' );
		this.assertEqual( 1, tracker.getThisTestMethodsNumberOfAssertions()			, 'MethodTotal' );
	}

	this.test_WhenRepeatedlyToldAnAssertionHasFailedIncreasesTheFailAndTotalCountsByOneEachTimeButDoesNotIncreaseThePassCounts = function() {

		var tracker = new TestResultTracker();
		tracker.reportAssertionFail();
		tracker.reportAssertionFail();
		tracker.reportAssertionFail();

		this.assertEqual( 0, tracker.getTotalNumberOfAssertionsPassed()				, 'TotalPassed' );
		this.assertEqual( 3, tracker.getTotalNumberOfAssertionsFailed()				, 'TotalFailed' );
		this.assertEqual( 3, tracker.getTotalNumberOfAssertions()					, 'Total' );
		this.assertEqual( 0, tracker.getThisTestCasesNumberOfAssertionsPassed()		, 'CasesPassed' );
		this.assertEqual( 3, tracker.getThisTestCasesNumberOfAssertionsFailed()		, 'CasesFailed' );
		this.assertEqual( 3, tracker.getThisTestCasesNumberOfAssertions()			, 'CasesTotal' );
		this.assertEqual( 0, tracker.getThisTestMethodsNumberOfAssertionsPassed()	, 'MethodPassed' );
		this.assertEqual( 3, tracker.getThisTestMethodsNumberOfAssertionsFailed()	, 'MethodFailed' );
		this.assertEqual( 3, tracker.getThisTestMethodsNumberOfAssertions()			, 'MethodTotal' );
	}

	this.test_WhenRepeatedlyToldAnAssertionsHavePassedAndFailedWillIncreaseThePassFailedAndTotalCountsIndependantly = function() {

		var tracker = new TestResultTracker();
		tracker.reportAssertionFail();
		tracker.reportAssertionFail();
		tracker.reportAssertionPass();
		tracker.reportAssertionPass();
		tracker.reportAssertionPass();

		this.assertEqual( 3, tracker.getTotalNumberOfAssertionsPassed()				, 'TotalPassed' );
		this.assertEqual( 2, tracker.getTotalNumberOfAssertionsFailed()				, 'TotalFailed' );
		this.assertEqual( 5, tracker.getTotalNumberOfAssertions()					, 'Total' );
		this.assertEqual( 3, tracker.getThisTestCasesNumberOfAssertionsPassed()		, 'CasesPassed' );
		this.assertEqual( 2, tracker.getThisTestCasesNumberOfAssertionsFailed()		, 'CasesFailed' );
		this.assertEqual( 5, tracker.getThisTestCasesNumberOfAssertions()			, 'CasesTotal' );
		this.assertEqual( 3, tracker.getThisTestMethodsNumberOfAssertionsPassed()	, 'MethodPassed' );
		this.assertEqual( 2, tracker.getThisTestMethodsNumberOfAssertionsFailed()	, 'MethodFailed' );
		this.assertEqual( 5, tracker.getThisTestMethodsNumberOfAssertions()			, 'MethodTotal' );
	}

	this.test_StatingThatATestCaseHasStartedWillResultInTheAssertionCountsForTheCurrentTestCaseBeingResetToZero = function() {

		var tracker = new TestResultTracker();
		tracker.reportAssertionFail();
		tracker.reportAssertionFail();
		tracker.reportAssertionPass();
		tracker.reportAssertionPass();
		tracker.reportAssertionPass();
		tracker.reportTestCaseStart();

		this.assertEqual( 3, tracker.getTotalNumberOfAssertionsPassed()				, 'TotalPassed' );
		this.assertEqual( 2, tracker.getTotalNumberOfAssertionsFailed()				, 'TotalFailed' );
		this.assertEqual( 5, tracker.getTotalNumberOfAssertions()					, 'Total' );
		this.assertEqual( 0, tracker.getThisTestCasesNumberOfAssertionsPassed()		, 'CasesPassed' );
		this.assertEqual( 0, tracker.getThisTestCasesNumberOfAssertionsFailed()		, 'CasesFailed' );
		this.assertEqual( 0, tracker.getThisTestCasesNumberOfAssertions()			, 'CasesTotal' );
		this.assertEqual( 3, tracker.getThisTestMethodsNumberOfAssertionsPassed()	, 'MethodPassed' );
		this.assertEqual( 2, tracker.getThisTestMethodsNumberOfAssertionsFailed()	, 'MethodFailed' );
		this.assertEqual( 5, tracker.getThisTestMethodsNumberOfAssertions()			, 'MethodTotal' );
	}

	this.test_StatingThatATestMethodHasStartedWillResultInTheAssertionCountsForTheCurrentTestMethodBeingResetToZero = function() {

		var tracker = new TestResultTracker();
		tracker.reportAssertionFail();
		tracker.reportAssertionFail();
		tracker.reportAssertionPass();
		tracker.reportAssertionPass();
		tracker.reportAssertionPass();
		tracker.reportTestMethodStart();

		this.assertEqual( 3, tracker.getTotalNumberOfAssertionsPassed()				, 'TotalPassed' );
		this.assertEqual( 2, tracker.getTotalNumberOfAssertionsFailed()				, 'TotalFailed' );
		this.assertEqual( 5, tracker.getTotalNumberOfAssertions()					, 'Total' );
		this.assertEqual( 3, tracker.getThisTestCasesNumberOfAssertionsPassed()		, 'CasesPassed' );
		this.assertEqual( 2, tracker.getThisTestCasesNumberOfAssertionsFailed()		, 'CasesFailed' );
		this.assertEqual( 5, tracker.getThisTestCasesNumberOfAssertions()			, 'CasesTotal' );
		this.assertEqual( 0, tracker.getThisTestMethodsNumberOfAssertionsPassed()	, 'MethodPassed' );
		this.assertEqual( 0, tracker.getThisTestMethodsNumberOfAssertionsFailed()	, 'MethodFailed' );
		this.assertEqual( 0, tracker.getThisTestMethodsNumberOfAssertions()			, 'MethodTotal' );
	}

	this.test_StatingThatATestCaseHasStartedWillStoreTheGivenTestCaseAsTheCurrentCase = function() {
	
		var testCaseName = 'thisIsTheTestCase';
		var tracker = new TestResultTracker();
		tracker.reportTestCaseStart( testCaseName );
		
		this.assertEqual( testCaseName, tracker.getCurrentTestCase() );
	}

	this.test_EndingATestCaseWipesOutTheValueOfTheCurrentTestCase = function() {

		var testMethodName = 'thisIsTheTestCase';
		var tracker = new TestResultTracker();
		tracker.reportTestCaseStart( testMethodName );
		tracker.reportTestCaseEnd();
	
		this.assertEqual( '', tracker.getCurrentTestCase() );
	}

	this.test_EndingATestCaseIncreasesTheNumberOfTestCasesRan = function() {
	
		var tracker = new TestResultTracker();
		tracker.reportTestCaseEnd();

		this.assertEqual( 1, tracker.getTotalNumberOfTestCases() );
	}

	this.test_RepeatedlyEndingTestCasesIncreasesTheNumberOfTestCasesRanEachTime = function() {
	
		var tracker = new TestResultTracker();
		tracker.reportTestCaseEnd();
		tracker.reportTestCaseEnd();
		tracker.reportTestCaseEnd();
		tracker.reportTestCaseEnd();

		this.assertEqual( 4, tracker.getTotalNumberOfTestCases() );
	}

	// TODO: Will this need to change when a 'no assertions' failure is added?
	
	this.test_EndingATestCaseWhereNoAssertionsHaveBeenReportedWillResultInTheTotalNumberAndPassedCasesIncreasingAndTheFailuresStayingTheSame = function() {

		var tracker = new TestResultTracker();
		tracker.reportTestCaseEnd();

		this.assertEqual( 0, tracker.getTotalNumberOfTestCasesFailed()	, 'Failed'  );
		this.assertEqual( 1, tracker.getTotalNumberOfTestCasesPassed()	, 'Passed' );
		this.assertEqual( 1, tracker.getTotalNumberOfTestCases()		, 'Total'  );
	}

	this.test_EndingMultipleTestCasesWhereNoAssertionsHaveBeenReportedWillResultInTheTotalNumberAndPassedCasesIncreasingByOneEachTimeAndTheFailuresStayingTheSame = function() {

		var tracker = new TestResultTracker();
		tracker.reportTestCaseEnd();
		tracker.reportTestCaseEnd();
		tracker.reportTestCaseEnd();

		this.assertEqual( 0, tracker.getTotalNumberOfTestCasesFailed()	, 'Failed'  );
		this.assertEqual( 3, tracker.getTotalNumberOfTestCasesPassed()	, 'Passed' );
		this.assertEqual( 3, tracker.getTotalNumberOfTestCases()		, 'Total'  );
	}

	this.test_EndingATestCaseWhereNoFailedAssertionsHaveBeenReportedWillResultInTheTotalNumberAndPassedCasesIncreasingAndTheFailuresStayingTheSame = function() {

		var tracker = new TestResultTracker();
		tracker.reportAssertionPass();
		tracker.reportTestCaseEnd();

		this.assertEqual( 0, tracker.getTotalNumberOfTestCasesFailed()	, 'Failed'  );
		this.assertEqual( 1, tracker.getTotalNumberOfTestCasesPassed()	, 'Passed' );
		this.assertEqual( 1, tracker.getTotalNumberOfTestCases()		, 'Total'  );
	}

	this.test_EndingMultipleTestCasesWhereNoFailedAssertionsHaveBeenReportedWillResultInTheTotalNumberAndPassedCasesIncreasingByOneEachTimeAndTheFailuresStayingTheSame = function() {

		var tracker = new TestResultTracker();
		tracker.reportAssertionPass();
		tracker.reportTestCaseEnd();
		tracker.reportAssertionPass();
		tracker.reportAssertionPass();
		tracker.reportTestCaseEnd();
		tracker.reportAssertionPass();
		tracker.reportAssertionPass();
		tracker.reportAssertionPass();
		tracker.reportTestCaseEnd();

		this.assertEqual( 0, tracker.getTotalNumberOfTestCasesFailed()	, 'Failed'  );
		this.assertEqual( 3, tracker.getTotalNumberOfTestCasesPassed()	, 'Passed' );
		this.assertEqual( 3, tracker.getTotalNumberOfTestCases()		, 'Total'  );
	}

	this.test_EndingATestCaseWhereSomeFailedAssertionsHaveBeenReportedWillResultInTheTotalNumberAndFailedCasesIncreasingByOneAndThePassedStayingTheSame = function() {

		var tracker = new TestResultTracker();
		tracker.reportAssertionFail();
		tracker.reportTestCaseEnd();

		this.assertEqual( 1, tracker.getTotalNumberOfTestCasesFailed()	, 'Failed'  );
		this.assertEqual( 0, tracker.getTotalNumberOfTestCasesPassed()	, 'Passed' );
		this.assertEqual( 1, tracker.getTotalNumberOfTestCases()		, 'Total'  );
	}

	this.test_EndingMultipleTestCasesWhereSomeFailedAssertionsHaveBeenReportedWillResultInTheTotalNumberAndFailedCasesIncreasingByOneEachTimeAndThePassedStayingTheSame = function() {

		var tracker = new TestResultTracker();
		tracker.reportAssertionFail();
		tracker.reportTestCaseEnd();
		tracker.reportAssertionFail();
		tracker.reportAssertionFail();
		tracker.reportTestCaseEnd();
		tracker.reportAssertionFail();
		tracker.reportAssertionFail();
		tracker.reportAssertionFail();
		tracker.reportTestCaseEnd();

		this.assertEqual( 3, tracker.getTotalNumberOfTestCasesFailed()	, 'Failed'  );
		this.assertEqual( 0, tracker.getTotalNumberOfTestCasesPassed()	, 'Passed' );
		this.assertEqual( 3, tracker.getTotalNumberOfTestCases()		, 'Total'  );
	}

	this.test_EndingATestCaseWhereSomeFailedAssertionsHaveBeenReportedWillResultInTheNumberOfFailuresIncreasingByOneEachTimeAnEndIsReportedUntilATestCaseStartIsIssued = function() {

		var tracker = new TestResultTracker();
		tracker.reportAssertionFail();
		tracker.reportTestCaseEnd();
		tracker.reportTestCaseEnd();
		tracker.reportTestCaseEnd();
		tracker.reportTestCaseStart();
		tracker.reportTestCaseEnd();

		this.assertEqual( 3, tracker.getTotalNumberOfTestCasesFailed()	, 'Failed'  );
		this.assertEqual( 1, tracker.getTotalNumberOfTestCasesPassed()	, 'Passed' );
		this.assertEqual( 4, tracker.getTotalNumberOfTestCases()		, 'Total'  );
	}

	this.test_EndingATestCaseDoesNotAffectTheTestMethodCounts = function() {

		var tracker = new TestResultTracker();
		tracker.reportAssertionFail();
		tracker.reportTestCaseEnd();
		tracker.reportTestCaseEnd();
		tracker.reportTestCaseEnd();
		tracker.reportTestCaseStart();
		tracker.reportTestCaseEnd();

		this.assertEqual( 0, tracker.getTotalNumberOfTestMethodsFailed()	, 'Failed'  );
		this.assertEqual( 0, tracker.getTotalNumberOfTestMethodsPassed()	, 'Passed' );
		this.assertEqual( 0, tracker.getTotalNumberOfTestMethods()			, 'Total'  );
	}

	this.test_StatingThatATestMethodHasStartedWillStoreTheGivenTestMethodAsTheCurrentMethod = function() {
	
		var testMethodName = 'thisIsTheTestMethod';
		var tracker = new TestResultTracker();
		tracker.reportTestMethodStart( testMethodName );
		
		this.assertEqual( testMethodName, tracker.getCurrentTestMethod() );
	}

	this.test_EndingATestMethodWipesOutTheValueOfTheCurrentTestMethod = function() {

		var testMethodName = 'thisIsTheTestMethod';
		var tracker = new TestResultTracker();
		tracker.reportTestMethodStart( testMethodName );
		tracker.reportTestMethodEnd();
	
		this.assertEqual( '', tracker.getCurrentTestMethod() );
	}

	this.test_EndingATestMethodIncreasesTheNumberOfTestMethodsRan = function() {
	
		var tracker = new TestResultTracker();
		tracker.reportTestMethodEnd();

		this.assertEqual( 1, tracker.getTotalNumberOfTestMethods() );
	}

	this.test_RepeatedlyEndingTestMethodsIncreasesTheNumberOfTestMethodsRanEachTime = function() {
	
		var tracker = new TestResultTracker();
		tracker.reportTestMethodEnd();
		tracker.reportTestMethodEnd();
		tracker.reportTestMethodEnd();
		tracker.reportTestMethodEnd();

		this.assertEqual( 4, tracker.getTotalNumberOfTestMethods() );
	}

	// TODO: Will this need to change when a 'no assertions' failure is added?
	
	this.test_EndingATestMethodWhereNoAssertionsHaveBeenReportedWillResultInTheTotalNumberAndPassedMethodsIncreasingAndTheFailuresStayingTheSame = function() {

		var tracker = new TestResultTracker();
		tracker.reportTestMethodEnd();

		this.assertEqual( 0, tracker.getTotalNumberOfTestMethodsFailed()	, 'Failed'  );
		this.assertEqual( 1, tracker.getTotalNumberOfTestMethodsPassed()	, 'Passed' );
		this.assertEqual( 1, tracker.getTotalNumberOfTestMethods()			, 'Total'  );
	}

	this.test_EndingMultipleTestMethodsWhereNoAssertionsHaveBeenReportedWillResultInTheTotalNumberAndPassedMethodsIncreasingByOneEachTimeAndTheFailuresStayingTheSame = function() {

		var tracker = new TestResultTracker();
		tracker.reportTestMethodEnd();
		tracker.reportTestMethodEnd();
		tracker.reportTestMethodEnd();

		this.assertEqual( 0, tracker.getTotalNumberOfTestMethodsFailed()	, 'Failed'  );
		this.assertEqual( 3, tracker.getTotalNumberOfTestMethodsPassed()	, 'Passed' );
		this.assertEqual( 3, tracker.getTotalNumberOfTestMethods()			, 'Total'  );
	}

	this.test_EndingATestMethodWhereNoFailedAssertionsHaveBeenReportedWillResultInTheTotalNumberAndPassedMethodsIncreasingAndTheFailuresStayingTheSame = function() {

		var tracker = new TestResultTracker();
		tracker.reportAssertionPass();
		tracker.reportTestMethodEnd();

		this.assertEqual( 0, tracker.getTotalNumberOfTestMethodsFailed()	, 'Failed'  );
		this.assertEqual( 1, tracker.getTotalNumberOfTestMethodsPassed()	, 'Passed' );
		this.assertEqual( 1, tracker.getTotalNumberOfTestMethods()			, 'Total'  );
	}

	this.test_EndingMultipleTestMethodsWhereNoFailedAssertionsHaveBeenReportedWillResultInTheTotalNumberAndPassedMethodsIncreasingByOneEachTimeAndTheFailuresStayingTheSame = function() {

		var tracker = new TestResultTracker();
		tracker.reportAssertionPass();
		tracker.reportTestMethodEnd();
		tracker.reportAssertionPass();
		tracker.reportAssertionPass();
		tracker.reportTestMethodEnd();
		tracker.reportAssertionPass();
		tracker.reportAssertionPass();
		tracker.reportAssertionPass();
		tracker.reportTestMethodEnd();

		this.assertEqual( 0, tracker.getTotalNumberOfTestMethodsFailed()	, 'Failed'  );
		this.assertEqual( 3, tracker.getTotalNumberOfTestMethodsPassed()	, 'Passed' );
		this.assertEqual( 3, tracker.getTotalNumberOfTestMethods()			, 'Total'  );
	}

	this.test_EndingATestMethodWhereSomeFailedAssertionsHaveBeenReportedWillResultInTheTotalNumberAndFailedMethodsIncreasingByOneAndThePassedStayingTheSame = function() {

		var tracker = new TestResultTracker();
		tracker.reportAssertionFail();
		tracker.reportTestMethodEnd();

		this.assertEqual( 1, tracker.getTotalNumberOfTestMethodsFailed()	, 'Failed'  );
		this.assertEqual( 0, tracker.getTotalNumberOfTestMethodsPassed()	, 'Passed' );
		this.assertEqual( 1, tracker.getTotalNumberOfTestMethods()			, 'Total'  );
	}

	this.test_EndingMultipleTestMethodsWhereSomeFailedAssertionsHaveBeenReportedWillResultInTheTotalNumberAndFailedMethodsIncreasingByOneEachTimeAndThePassedStayingTheSame = function() {

		var tracker = new TestResultTracker();
		tracker.reportAssertionFail();
		tracker.reportTestMethodEnd();
		tracker.reportAssertionFail();
		tracker.reportAssertionFail();
		tracker.reportTestMethodEnd();
		tracker.reportAssertionFail();
		tracker.reportAssertionFail();
		tracker.reportAssertionFail();
		tracker.reportTestMethodEnd();

		this.assertEqual( 3, tracker.getTotalNumberOfTestMethodsFailed()	, 'Failed'  );
		this.assertEqual( 0, tracker.getTotalNumberOfTestMethodsPassed()	, 'Passed' );
		this.assertEqual( 3, tracker.getTotalNumberOfTestMethods()			, 'Total'  );
	}

	this.test_EndingATestMethodWhereSomeFailedAssertionsHaveBeenReportedWillResultInTheNumberOfFailuresIncreasingByOneEachTimeAnEndIsReportedUntilATestMethodStartIsIssued = function() {

		var tracker = new TestResultTracker();
		tracker.reportAssertionFail();
		tracker.reportTestMethodEnd();
		tracker.reportTestMethodEnd();
		tracker.reportTestMethodEnd();
		tracker.reportTestMethodStart();
		tracker.reportTestMethodEnd();

		this.assertEqual( 3, tracker.getTotalNumberOfTestMethodsFailed()	, 'Failed'  );
		this.assertEqual( 1, tracker.getTotalNumberOfTestMethodsPassed()	, 'Passed' );
		this.assertEqual( 4, tracker.getTotalNumberOfTestMethods()			, 'Total'  );
	}

	this.test_EndingATestMethodDoesNotAffectTheTestCaseCounts = function() {

		var tracker = new TestResultTracker();
		tracker.reportAssertionFail();
		tracker.reportTestMethodEnd();
		tracker.reportTestMethodEnd();
		tracker.reportTestMethodEnd();
		tracker.reportTestMethodStart();
		tracker.reportTestMethodEnd();

		this.assertEqual( 0, tracker.getTotalNumberOfTestCasesFailed()	, 'Failed'  );
		this.assertEqual( 0, tracker.getTotalNumberOfTestCasesPassed()	, 'Passed' );
		this.assertEqual( 0, tracker.getTotalNumberOfTestCases()		, 'Total'  );
	}
}